package 数据结构和算法.剑指offer.链表.删除链表的节点;

import 工具.单向节点.Node;
import 工具.打印.PrintUtil;

/**
 * 给定单向链表的头指针和一个要删除的节点的值，定义一个函数删除该节点。
 * 返回删除后的链表的头节点。
 * <p>
 * 题目保证链表中节点的值互不相同
 * 若使用 C 或 C++ 语言，你不需要 free 或 delete 被删除的节点
 */
public class Test {
    public static void main(String[] args) {
        Node node = new Node(1);
        Node node1 = new Node(2);
        Node node2 = new Node(3);
        Node node3 = new Node(4);
        Node node4 = new Node(5);
        node.setNext(node1);
        node1.setNext(node2);
        node2.setNext(node3);
        node3.setNext(node4);
        PrintUtil.println(delete(node, 4));
    }

    public static Node delete(Node head, int value) {
        if (null == head) {
            return null;
        }
        if (head.getValue() == value) {
            return null;
        }
        Node current = head;
        while (null != current.getNext() && current.getNext().getValue() != value) {
            current = current.getNext();
        }

        if (current.getNext() != null) {
            current.setNext(current.getNext().getNext());
        }

        return head;
    }
}
